/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Protocolo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;

/**
 *
 * @author Angie
 */
public class ConexionCliente  extends Thread{
        private Socket cliente;
        private BufferedReader entrada;
        private PrintWriter salida;
        private String nombreUsuario;
        private boolean conectado;
        private ArrayList<ObservarProtocolo> observadores;

        public ConexionCliente(String server, int puerto, String nombre){
            try{
                cliente = new Socket(server, puerto);
                entrada = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
                salida = new PrintWriter(cliente.getOutputStream(), true);
                nombreUsuario = nombre;
                conectado = true;
                observadores = new ArrayList<ObservarProtocolo>();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    @Override
        public void run(){
            // PROTOCOLO
            // 1. Enviar nombre de usuario
            salida.println(nombreUsuario);
            // 2. Leer bienvenida del servidor
            try{
                String bienvenida = entrada.readLine();
                System.out.println(bienvenida);
                //3. Enviar mensajes
                while(conectado){
                    leerMensajeServidor();
                }
                // Cerrar Conexiones
                entrada.close();
                salida.close();
                cliente.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    public void desconectar(){
        salida.println("Ya me voy");
        //4. Salir de la sala
        salida.println("COMANDO:bye");
        conectado = false;
    }
// Implementacion de Maria Angelica y Juan Camilo
    public void getLista() throws IOException{
        String lista="";
        salida.println("COMANDO:Lista");
    }

    public void enviarMensaje(String mensaje){
        salida.println(mensaje);
    }

    private synchronized void leerMensajeServidor()throws InterruptedException, IOException{
        String m;
       while((m=entrada.readLine())== null ){
            wait();
        }
        System.out.println("**"+m);
        if(m.startsWith("LISTAUSUARIOS:")){
            for(ObservarProtocolo obs: observadores){
                String[] parts = m.split(":");
                obs.notificarLista(parts[1]);
            }
        }
        else{
            for(ObservarProtocolo obs: observadores){
                String[] parts = m.split(":");
                obs.recibirMensaje(parts[0], parts[1]);
            }
        }
        notify();
    }

    public void agregarObservador(ObservarProtocolo obs){
        observadores.add(obs);
    }
}
